home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / clean / sun3.lha / Sun3 / seqdemos / e.icl next >
Text File  |  1992-08-07  |  1KB  |  69 lines

  1. MODULE e;
  2.  
  3. <<
  4. Approximation of the number e.
  5.  
  6. Result: A list containing the first NrDigits digits of e = [2,7,1,8,2,8,1,8,2,8,...].
  7. >>
  8.  
  9. IMPORT deltaI;
  10.  
  11.  
  12. MACRO
  13.  
  14.     NrDigits -> 200;    == The number of digits of the approximation of e
  15.  
  16.  
  17. RULE
  18.  
  19. ==
  20. ==  Some miscellaneous functions on lists:
  21. ==
  22.  
  23. ::  Hd [x] -> x;
  24.     Hd [hd|tl] -> hd;
  25.  
  26. ::  Tl [x] -> [x];
  27.     Tl [hd|tl] -> tl;
  28.  
  29. ==  Take takes the first n elements of a list
  30.     
  31. ::  Take INT [x] -> [x];
  32.     Take 0 l     -> [];
  33.     Take n [h|t] -> [h | Take (-- n) t];
  34.     Take n []    -> [];
  35.  
  36. ==
  37. ==  Approximating e:
  38. ==
  39.  
  40. ::  Approx_e -> [INT];
  41.     Approx_e -> [2 | Expan ones],
  42.                 ones: [1 | ones];
  43.  
  44. <<  Expan expects an infinite list of ones and returns an infinite
  45.     list containing the digits of the fraction of e ([7,1,8,2,8,...]).
  46. >>   
  47. ::  Expan [INT] -> [INT];
  48.     Expan f ->  [Hd ten | Expan (Tl ten)],
  49.                 ten : Ten 2 f;
  50.  
  51. ::  Ten INT [INT] -> [INT];
  52.     Ten c [p|q] ->  [/ k c, + (% k c) a1 | b1]       , IF Safe k:(* 10 p) c
  53.                 ->  [/ (+ k a1) c, % (+ k a1) c | b1],
  54.                     a1:  Hd ten,
  55.                     b1:  Tl ten,
  56.                     ten: Ten (++ c) q;
  57.  
  58. ::  Safe INT INT -> BOOL;
  59.     Safe k c -> = (/ k c) (/ (+ k 9) c);
  60.  
  61. <<
  62. The Start rule  returns the first NrDigits elements of the
  63.                 list of digits returned by the function
  64.                 'Approx_e' by means of the function Take.
  65. >>
  66.     
  67. ::  Start -> [INT];
  68.     Start -> Take NrDigits Approx_e;
  69.